<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title></title>
</head>
<body>
	 <script type="text/javascript">
	 	/*
			js有两种数据类型
			1.基本数据类型(一般存在栈内存中)：Number，String，Boolean，undefined，null，symbol
			①Number: 数字类型， js不区分整型和浮点型,包含所有数字
					Infinity 正无穷大 -Infinity 负无穷大
					NaN not a number 表示不是一个数字
			②String：字符串类型，单引号或者双引号包裹住的就是字符串
					变量.length 获取字符串长度
			③Boolean:布尔类型 true false
				主要用在逻辑判断上
				④undefined: 未定义
					-声明变量没赋值，它的值就是undefined
					-该类型只有一个值 就是undefined
			⑤null :空类型，是一个空的指针对象，表示用来保存值的，但是还没真正保存
			⑥symbol：表示独一无二的
				

			2.复杂基本类型（一般放在堆内存中）：
			object 对象
			array 数组
			function 函数


			typeof:用来判断变量的数据类型

			栈内存和堆内存的优缺点：
				在js中
				基本数据类型 变量大小是固定的，并且操作简单容易，放到栈内存中存储（先进后出）
				复杂数据类型 大小不固定，放到堆里，他们会根据自己的内存大小分配空间

				复杂数据类型 【值】 保存在堆内存中，栈内存里存的是一个指针地址，
				这个指针指向内存中的一个位置，这个位置就是保存【值】

				栈内存的系统效率比较高
				堆内存需要分配空间和地址，还需要将地址存到栈上，效率低于栈99
	 	*/

	 	let n1 = 10;
	 	let n2 = 10.99;
	 	let n3 = -10;
	 	let n4 = Infinity;
	 	let n5 = -Infinity;
	 	let n6 = NaN
	 	let n7 = 6e3;//6乘10的三次方
	 	console.log("n1的数据类型是", typeof n1) //number
	 	console.log("n2的数据类型是", typeof n2) //number
	 	console.log("n3的数据类型是", typeof n3) //number
	 	console.log("n4的数据类型是", typeof n4) //number
	 	console.log("n5的数据类型是", typeof n5) //number
	 	console.log("n6的数据类型是", typeof n6) //number
	 	console.log("n7的数据类型是", typeof n7,n7) //number
	 	// 注意：在js中进行精度比较高的运算时----数据精度问题
	 	// 比如：0.1+0.2计算机底层用的是二进制，会导致个别出现小数的情况，需要特殊处理
	 	let a = 0.1
	 	let b = 0.2
	 	console.log(a + b)//0.3000000000004
	 	console.log("===================================")
	 	// 根据精度，先放大10n倍，运算完，再除以10n

	 	// String
	 	let s1 = '   '
	 	let s2 = '12'
	 	let s3 = ""
	 	console.log("s1的数据类型是",typeof s1.length)//String 9
	 	console.log("s2的数据类型是",typeof s2.length)//String 2
	 	console.log("s3的数据类型是",typeof s3.length)//String 0

	 	let s4 = 1 + "1"//如果运算中有字符串，并且用+链接，发生是字符串拼接
	 	console.log(s4,typeof s4)//11 string
	 	console.log("========================")

	 	// Boolean
	 	let b1 = true
	 	console.log("b1的数据类型",typeof b1)//boolean
	 	let b2 = 1 > 2
	 	console.log(b2)//false
	 	console.log("=================")

	 	// unndefined
	 	let u1;
	 	console.log(typeof u1)//undefined
	 	console.log("======================")

	 	// null
	 	let nu = null
	 	console.log(typeof null)//object

	 	// object
	 	let obj = {
	 		// 属性名：属性值
	 		name:"张三",
	 		age:18
	 	}
	 	console.log(obj.name)//张三
	 	console.log(typeof obj)//object

	 	// Array
	 	let arr = [1,true,undefined,"hello",null,{name:"张三"}]
	 	let arr2 = arr

	 	console.log(typeof arr)//object
	 	// Array.isArray判断是不是一个数组 是返回true 不是false
	 	console.log(Array.isArray(arr))//true
	 	//根据下标取值 从0开始
	 	console.log(arr[0])//1

	 	arr2[0] = 10

	 	console.log(arr2,arr)

	 </script>
</body>
</html>